package bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import model.Cbo;
import model.Conhecimentotecnologico;
import model.Curso;
import model.Empregador;
import model.Vaga;
import model.Vagaconhectec;
import model.Vagacurso;
import dao.DAOVaga;
import dao.DAOVagaCT;
import dao.DAOVagaCurso;

@ManagedBean(name="MBVaga")
@SessionScoped
public class MBVaga {
	private Vaga beanVaga = new Vaga();
	private Vagaconhectec beanVagaCT = new Vagaconhectec();
	private Vagacurso beanVagaCurso = new Vagacurso();	
	private Empregador beanEmpregador;
	private Conhecimentotecnologico beanCT = new Conhecimentotecnologico();
	private Curso beanCurso = new Curso();
	private Cbo beanCBO = new Cbo();
	
	private String nomeCT, nomeConhec; // para pesquisar CT
	private String nomeCurso; // para pesquisar Curso
	private String nomeCBO; // para~pesquisar CBO
	private int idade; // para salvar faixa etaria separada

	private DAOVaga daoVaga = new DAOVaga();
	private DAOVagaCT daoVagaCT = new DAOVagaCT();
	private DAOVagaCurso daoVagaCurso = new DAOVagaCurso();	
	
	private DataModel<Conhecimentotecnologico> listaPesqCTs;
	private DataModel<Curso> listaPesqCursos;
	private DataModel<Cbo> listaPesqCBOs;	
	
	private List<Vagaconhectec> listaCTs = new ArrayList<Vagaconhectec>();
	private List<Vagacurso> listaCursos = new ArrayList<Vagacurso>();
	//private List<Vagacurso> CBOs = new ArrayList<Vagacurso>();

	public MBVaga(){
		if(beanEmpregador == null){
			//recuperar o aluno do MBLogin
			getBeanEmpregador();
		}
		getListaCursos();
	}
		
	
	// GET E SET
	//===================================================================================================================================================		

	public DAOVagaCT getDaoVagaCT() {
		return daoVagaCT;
	}

	public void setDaoVagaCT(DAOVagaCT daoVagaCT) {
		this.daoVagaCT = daoVagaCT;
	}


	public DAOVagaCurso getDaoVagaCurso() {
		return daoVagaCurso;
	}

	public void setDaoVagaCurso(DAOVagaCurso daoVagaCurso) {
		this.daoVagaCurso = daoVagaCurso;
	}
	

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}
	
	public Vaga getBeanVaga() {
		return beanVaga;
	}

	public void setBeanVaga(Vaga beanVaga) {
		this.beanVaga = beanVaga;
	}

	public Vagaconhectec getBeanVagaCT() {
		return beanVagaCT;
	}

	public void setBeanVagaCT(Vagaconhectec beanVagaCT) {
		this.beanVagaCT = beanVagaCT;
	}

	public Vagacurso getBeanVagaCurso() {
		return beanVagaCurso;
	}

	public void setBeanVagaCurso(Vagacurso beanVagaCurso) {
		this.beanVagaCurso = beanVagaCurso;
	}

	public Empregador getBeanEmpregador() {
		if (beanEmpregador == null){
			recuperarEmp();
		}
		return beanEmpregador;
	}

	public void setBeanEmpregador(Empregador beanEmpregador) {
		this.beanEmpregador = beanEmpregador;
	}

	public Conhecimentotecnologico getBeanCT() {
		return beanCT;
	}

	public void setBeanCT(Conhecimentotecnologico beanCT) {
		this.beanCT = beanCT;
	}

	public Curso getBeanCurso() {
		return beanCurso;
	}

	public void setBeanCurso(Curso beanCurso) {
		this.beanCurso = beanCurso;
	}

	public Cbo getBeanCBO() {
		return beanCBO;
	}

	public void setBeanCBO(Cbo beanCBO) {
		this.beanCBO = beanCBO;
	}

	public String getNomeCT() {
		return nomeCT;
	}

	public void setNomeCT(String nomeCT) {
		this.nomeCT = nomeCT;
	}

	public String getNomeCurso() {
		return nomeCurso;
	}

	public void setNomeCurso(String nomeCurso) {
		this.nomeCurso = nomeCurso;
	}

	public String getNomeCBO() {
		return nomeCBO;
	}

	public void setNomeCBO(String nomeCBO) {
		this.nomeCBO = nomeCBO;
	}

	public DAOVaga getDaoVaga() {
		return daoVaga;
	}

	public void setDaoVaga(DAOVaga daoVaga) {
		this.daoVaga = daoVaga;
	}

	
	public DataModel<Conhecimentotecnologico> getListaPesqCTs() {
		return listaPesqCTs;
	}

	public void setListaPesqCTs(DataModel<Conhecimentotecnologico> listaPesqCTs) {
		this.listaPesqCTs = listaPesqCTs;
	}

	public DataModel<Curso> getListaPesqCursos() {
		return listaPesqCursos;
	}

	public void setListaPesqCursos(DataModel<Curso> listaPesqCursos) {
		this.listaPesqCursos = listaPesqCursos;
	}

	public DataModel<Cbo> getListaPesqCBOs() {
		return listaPesqCBOs;
	}

	public void setListaPesqCBOs(DataModel<Cbo> listaPesqCBOs) {
		this.listaPesqCBOs = listaPesqCBOs;
	}

	public List<Vagaconhectec> getListaCTs() {
		return listaCTs;
	}

	public void setListaCTs(List<Vagaconhectec> listaCTs) {
		this.listaCTs = listaCTs;
	}


	public List<Vagacurso> getListaCursos() {
		return listaCursos;
	}

	public void setListaCursos(List<Vagacurso> listaCursos) {
		this.listaCursos = listaCursos;
	}

	public String getNomeConhec() {
		return nomeConhec;
	}

	public void setNomeConhec(String nomeConhec) {
		this.nomeConhec = nomeConhec;
	}
	
	//===================================================================================================================================================	
	// FIM DOS GET E SET
	
	
	public void addCT(){	
		beanVagaCT.setConhecimentotecnologico(getBeanCT());
		beanVagaCT.setVaga(getBeanVaga());
		listaCTs.add(beanVagaCT);
		beanVagaCT = new Vagaconhectec();
	}
	
	public void addCurso(){	
		beanVagaCurso.setCurso(beanCurso);
		beanVagaCurso.setVaga(beanVaga);
		listaCursos.add(beanVagaCurso);
		beanVagaCurso = new Vagacurso();
	}
	
	public void gerarVaga(){
		beanVaga.setEmpregador(beanEmpregador);
		System.out.println(beanEmpregador.getCodEmp());
		if(idade == 1){
			beanVaga.setFxEt1(18);
			beanVaga.setFxEt2(21);
		}
		else if(idade == 2){
			 beanVaga.setFxEt1(21);
			 beanVaga.setFxEt2(25);			
		}
		else if(idade == 3){
			 beanVaga.setFxEt1(26);
			 beanVaga.setFxEt2(35);			
		}
		else if(idade == 4){
			 beanVaga.setFxEt1(35);
			 beanVaga.setFxEt2(0);	
		}
		else{
			 beanVaga.setFxEt1(18);
			 beanVaga.setFxEt2(90);			
		}
		beanVaga.setDataCadVaga(new Date());		
		beanVaga.setSituacaoVaga(0);		
		daoVaga.salvarVaga(beanVaga);
	    	
		for(Vagaconhectec ct: listaCTs){
			ct.setVaga(beanVaga);
			daoVagaCT.salvarVagaCT(ct);
		}		
		listaCTs.clear();
		
		for(Vagacurso curso: listaCursos){
			curso.setVaga(beanVaga);
			daoVagaCurso.salvarVagaCurso(curso);
		}
		listaCursos.clear();
		beanVaga = new Vaga();
		beanVagaCT = new Vagaconhectec();
		beanVagaCurso = new Vagacurso();
	}
	
	
	// populando a lista do pesquisar
	@SuppressWarnings("rawtypes")
	public DataModel listarCT(){
		listaPesqCTs = new ListDataModel<Conhecimentotecnologico>(daoVaga.listarCT(nomeCT));
		return listaPesqCTs;
	}
	
	@SuppressWarnings("rawtypes")
	public DataModel listarCurso(){
		listaPesqCursos = new ListDataModel<Curso>(daoVaga.listarCurso(nomeCurso));
		return listaPesqCursos;
	}
	
	@SuppressWarnings("rawtypes")
	public DataModel listarCBO(){
		listaPesqCBOs = new ListDataModel<Cbo>(daoVaga.listarCBO(nomeCBO));
		return listaPesqCBOs;			
	}
	
	//selecionando o campo escolhido apos lista do pesquisar ser exibida
	public void selecionarCT(){
		beanCT = (Conhecimentotecnologico) listaPesqCTs.getRowData(); 
		beanVagaCT.setConhecimentotecnologico(getBeanCT());
		beanVagaCT.setVaga(getBeanVaga());
		listaCTs.add(beanVagaCT);		
		beanVagaCT = new Vagaconhectec();
	}
	
	//selecionando o campo escolhido apos lista do pesquisar ser exibida
	public void selecionarCurso(){
		beanCurso = (Curso) listaPesqCursos.getRowData(); 
		beanVagaCurso.setCurso(getBeanCurso());
		beanVagaCurso.setVaga(getBeanVaga());
		listaCursos.add(beanVagaCurso);		
		beanVagaCurso = new Vagacurso();
	}
	
	public void selecionarCBO(){
		beanVaga.setCbo(listaPesqCBOs.getRowData());
	}
	
	public void recuperarEmp(){
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();  
		HttpSession session = (HttpSession) request.getSession();  
		if(session != null){  
			this.beanEmpregador = (Empregador) session.getAttribute("emp"); 
		} 
	}
	
	
}